home *** CD-ROM | disk | FTP | other *** search
/ Programmer Power Tools / Programmer Power Tools.iso / pibterm / pibt41s2.arc / PIBGENRT.MOD < prev    next >
Encoding:
Text File  |  1988-02-21  |  7.1 KB  |  163 lines

  1. (*----------------------------------------------------------------------*)
  2. (*           GENTERM.PAS --- General Terminal Emulator for PIBTERM      *)
  3. (*----------------------------------------------------------------------*)
  4. (*                                                                      *)
  5. (*  Author:  Philip R. Burns                                            *)
  6. (*  Version: 1.0   (November, 1986)  for v4.0 of PibTerm.               *)
  7. (*           1.1   (December, 1987)  for new CISB stuff.                *)
  8. (*  Systems: For MS-DOS on IBM PCs and close compatibles only.          *)
  9. (*                                                                      *)
  10. (*  History: Original with me.                                          *)
  11. (*                                                                      *)
  12. (*----------------------------------------------------------------------*)
  13.  
  14. PROCEDURE Emulate_General_Terminal;
  15.  
  16. (*----------------------------------------------------------------------*)
  17. (*                                                                      *)
  18. (*     Procedure:  Emulate_General_Terminal                             *)
  19. (*                                                                      *)
  20. (*     Purpose:    Controls general terminal emulation                  *)
  21. (*                                                                      *)
  22. (*     Calling Sequence:                                                *)
  23. (*                                                                      *)
  24. (*        Emulate_General_Terminal;                                     *)
  25. (*                                                                      *)
  26. (*      Calls:   Async_Send                                             *)
  27. (*               Async_Receive                                          *)
  28. (*               Pibterm_keypressed                                             *)
  29. (*               Process_Command                                        *)
  30. (*               Display_Character                                      *)
  31. (*               Async_Buffer_Full                                      *)
  32. (*                                                                      *)
  33. (*----------------------------------------------------------------------*)
  34.  
  35. VAR
  36.    Done           : BOOLEAN    (* TRUE to exit terminal emulation mode *);
  37.    Ch             : CHAR       (* Character read/written               *);
  38.    B              : BOOLEAN    (* General boolean flag                 *);
  39.    ClrScr_Req     : BOOLEAN    (* Clear screen request                 *);
  40.    Save_Do_Status : BOOLEAN    (* Saves status line status             *);
  41.    Save_CISB      : BOOLEAN    (* Saves CISB status                    *);
  42.    Save_Kermit    : BOOLEAN    (* Saves Kermit status                  *);
  43.    Save_Zmodem    : BOOLEAN    (* Saves Zmodem status                  *);
  44.    Save_State     : INTEGER    (* Saves display action state           *);
  45.  
  46.                                (* Saves character set pointer          *)
  47.    Save_CPtr      : Character_Vector_Ptr_Type;
  48.  
  49.  
  50. BEGIN (* Emulate_General_Terminal *)
  51.  
  52.                                   (* Initialize text mode display   *)
  53.    Init_Text_Terminal;
  54.                                   (* Set other emulation variables  *)
  55.  
  56.    Reset_General_Terminal( FALSE );
  57.  
  58.                                    (* Not done here yet *)
  59.    Done := FALSE;
  60.                                    (* Loop over input until done *)
  61.    WHILE ( NOT Done ) DO
  62.       BEGIN
  63.                                    (* Check for character typed at keyboard *)
  64.          IF PibTerm_KeyPressed THEN
  65.             BEGIN
  66.  
  67.                Save_Do_Status := Do_Status_Line;
  68.                Save_CISB      := CompuServe_B_On;
  69.                Save_Kermit    := Kermit_Autodownload;
  70.                Save_Zmodem    := Zmodem_Autodownload;
  71.  
  72.                Handle_Keyboard_Input( Done , Reset_Requested ,
  73.                                       ClrScr_Req );
  74.                IF Reset_Requested THEN
  75.                   BEGIN
  76.                      Clear_Window;
  77.                      Reset_General_Terminal( TRUE );
  78.                      ClrScr_Req := FALSE;
  79.                   END;
  80.  
  81.                IF ClrScr_Req THEN
  82.                   Clear_Window;
  83.  
  84.                IF ( Save_Do_Status <> Do_Status_Line ) THEN
  85.                   BEGIN
  86.  
  87.                      IF Do_Status_Line THEN
  88.                         Ansi_Last_Line := Max_Screen_Line - 1
  89.                      ELSE
  90.                         Ansi_Last_Line := Max_Screen_Line;
  91.  
  92.                      PibTerm_Window( 1, 1, Max_Screen_Col, Ansi_Last_Line );
  93.  
  94.                   END;
  95.  
  96.                IF ( ( Save_CISB   <> CompuServe_B_On       ) OR
  97.                     ( Save_Kermit <> Kermit_Autodownload   ) OR
  98.                     ( Save_Zmodem <> Zmodem_Autodownload   ) ) THEN
  99.                   BEGIN
  100.                      Save_State := Display_Action_State;
  101.                      Save_CPtr  := Character_Set_Ptr;
  102.                      Set_Display_Actions;
  103.                      Display_Action_State  := Save_State;
  104.                      Character_Set_Ptr     := Save_CPtr;
  105.                   END;
  106.  
  107.             END   (* PibTerm_KeyPressed *);
  108.  
  109.          IF ( Script_File_Mode AND ( NOT ( Done OR Really_Wait_String ) ) ) THEN
  110.             BEGIN
  111.                Get_Script_Command( PibTerm_Command );
  112.                Execute_Command   ( PibTerm_Command , Done , TRUE );
  113.             END;
  114.                                    (* Hold everything while scroll lock on *)
  115.  
  116.          IF Scroll_Lock_On THEN
  117.             Handle_Scroll_Lock;
  118.                                    (* Handle carrier drop *)
  119.          IF Carrier_Dropped THEN
  120.             Handle_Carrier_Drop;
  121.                                    (* Process character from remote *)
  122.  
  123.          IF ( Async_Buffer_Head <> Async_Buffer_Tail ) THEN
  124.             BEGIN
  125.                                    (* Get the character *)
  126.  
  127.                B := Async_Receive( Ch );
  128.  
  129.                                    (* Strip high bit if requested *)
  130.  
  131.                IF Auto_Strip_High_Bit THEN
  132.                   Ch := CHR( ORD( Ch ) AND $7F );
  133.  
  134.                                    (* Perform translation *)
  135.  
  136.                Ch := TrTab[Ch];
  137.  
  138.                                    (* Display the character received. *)
  139.  
  140.                B := Do_Display_Action( Ch , Done );
  141.  
  142.                IF Do_Script_Tests THEN
  143.                   Do_Script_Checks( Ch );
  144.  
  145.             END
  146.                                    (* Check if waitstring time exhausted *)
  147.          ELSE
  148.             BEGIN
  149.                Async_Line_Status := Async_Line_Status AND $FD;
  150.                IF Really_Wait_String THEN
  151.                   Check_Wait_String_Time;
  152.                IF ( ( NOT PibTerm_KeyPressed ) AND ( NOT Script_File_Mode ) ) THEN
  153.                   IF ( Async_Buffer_Head = Async_Buffer_Tail ) THEN
  154.                      GiveAwayTime( 1 );
  155.             END;
  156.  
  157.       END;
  158.                                    (* Reset whole screen as window *)
  159.  
  160.    PibTerm_Window( 1, 1, Max_Screen_Col, Max_Screen_Line );
  161.  
  162. END   (* Emulate_General_Terminal *);
  163.